package ar.edu.utn.frsf.tpae.a2014.g02.service;

import java.util.Date;
import java.util.List;

import ar.edu.utn.frsf.tpae.a2014.g02.persistence.model.EstadoPedido;
import ar.edu.utn.frsf.tpae.a2014.g02.persistence.model.Pedido;

/**
 * Interfaz que define las operaciones que debe proveer un servicio de pedidos.
 * 
 * @author Ramonda-Lazzarini
 */
public interface PedidoService {

	/**
	 * Se crea un pedido asignandolo al cliente dado. La fecha y comentario, se
	 * utilizan para el historial. Se establece el estado a
	 * {@link EstadoPedido#ACEPTADO}
	 * 
	 * @param pedido
	 * @param fecha
	 * @param comentarios
	 * @return
	 */
	Pedido crear(Pedido pedido, Date fecha, String comentarios);

	/**
	 * Se actualiza el estado a {@link EstadoPedido#EN_TRANSPORTE} y se asigna
	 * el transportista
	 * 
	 * @param pedido
	 * @param fecha
	 * @param comentarios
	 * @return
	 */
	Pedido asginarATransportista(Pedido pedido, Date fecha, String comentarios);

	/**
	 * Se asigna el administrador
	 * 
	 * @param pedido
	 * @param fecha
	 * @param comentarios
	 * @return
	 */
	Pedido asginarAAdministrador(Pedido pedido, Date fecha, String comentarios);

	/**
	 * Obtiene la lista de todas los pedidos.
	 * 
	 * @return La lista de todas los pedidos.
	 */
	List<Pedido> listar();

}
